---
id: 642335d232d7690b2d67dbaf
title: Schritt 27
challengeType: 0
dashedName: step-27
---

# --description--

Der `free money` stimmt noch nicht überein, da auch das Ende des Strings übereinstimmen muss.

Like the `^` anchor, you can use the `$` anchor to match the end of the string.

Aktualisiere deinen regulären Ausdruck so, dass er entweder mit dem Ende des Strings oder einem Leerzeichen übereinstimmt, wie du es für den Anfang des Strings gemacht hast.

# --hints--

Deine `freeRegex` sollte eine zweite Gruppe verwenden, die nicht erfasst wird.

```js
assert.lengthOf(freeRegex.source.match(/\(\?:/g), 2);
```

Deine `freeRegex` sollte eine Gruppe verwenden, die nicht erfasst wird, welche mit `\s` or `$` übereinstimmt.

```js
assert.match(freeRegex.source, /\(\?:(\$\|\\s|\\s\|\$)\)/);
```

Deine `freeRegex` sollte mit `it's free money time` übereinstimmen.

```js
assert.match("it's free money time", freeRegex);
```

Deine `freeRegex` sollte mit `free money time` übereinstimmen.

```js
assert.match('free money time', freeRegex);
```

Deine `freeRegex` sollte mit `it's free money` übereinstimmen.

```js
assert.match("it's free money", freeRegex);
```

Deine `freeRegex` sollte mit `free money` übereinstimmen.

```js
assert.match('free money', freeRegex);
```

Deine `freeRegex` sollte nicht mit `hands-free money time` übereinstimmen.

```js
assert.notMatch('hands-free money', freeRegex);
```

Deine `freeRegex` sollte nicht mit `free money-management` übereinstimmen.

```js
assert.notMatch('free money-management', freeRegex);
```

# --seed--

## --seed-contents--

```html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width" />
    <title>Learn Regular Expressions by Building a Spam Filter</title>
    <link rel="stylesheet" href="styles.css" />
  </head>

  <body>
    <header class="main-text">
      <h1 class="title">Is this Spam?</h1>
      <p class="description">
        Enter a phrase to check if it would be marked as spam or not.
      </p>
    </header>

    <main>
      <label class="message-label" for="message-input">Message: </label>
      <textarea
        placeholder="Enter message here"
        value=""
        type="text"
        name="message"
        id="message-input"
        rows="10"
        cols="40"
      ></textarea>
      <button class="btn" id="check-message-btn" type="button">
        Check message
      </button>
      <p id="result"></p>
    </main>

    <footer class="footer">&copy; freeCodeCamp</footer>
    <script src="./script.js"></script>
  </body>
</html>
```

```css
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

:root {
  --dark-grey: #1b1b32;
  --light-grey: #f5f6f7;
  --golden-yellow: #fecc4c;
  --yellow: #ffcc4c;
  --gold: #feac32;
  --orange: #ffac33;
  --dark-orange: #f89808;
}

body {
  background-color: var(--dark-grey);
  color: var(--light-grey);
}

body,
#message-input:placeholder-shown {
  text-align: center;
}

textarea {
  max-width: 90%;
}

.main-text {
  margin: 25px 0;
}

.title {
  font-size: 2.5rem;
}

.description {
  margin-top: 15px;
  font-size: 1.4rem;
}

.message-label {
  display: block;
  margin-bottom: 20px;
  font-size: 1.5rem;
}

#message-input:placeholder-shown,
textarea {
  font-size: 1.1rem;
}

.btn {
  display: block;
  cursor: pointer;
  width: 200px;
  margin: 10px auto;
  color: var(--dark-grey);
  background-color: var(--gold);
  background-image: linear-gradient(var(--golden-yellow), var(--orange));
  border-color: var(--gold);
  border-width: 3px;
}

.btn:hover {
  background-image: linear-gradient(var(--yellow), var(--dark-orange));
}

#result {
  font-size: 2rem;
  margin: 20px 0;
}

.footer {
  margin-top: 10px;
}
```

```js
const messageInput = document.getElementById("message-input");
const result = document.getElementById("result");
const checkMessageButton = document.getElementById("check-message-btn");

const helpRegex = /please help|assist me/i;
const dollarRegex = /[0-9]+ (?:hundred|thousand|million|billion)? dollars/i;
--fcc-editable-region--
const freeRegex = /(?:^|\s)fr[e3][e3] m[o0]n[e3]y\s/i;
--fcc-editable-region--

const denyList = [helpRegex, dollarRegex, freeRegex];

const isSpam = (msg) => denyList.some((regex) => regex.test(msg));

checkMessageButton.addEventListener("click", () => {
  if (messageInput.value === "") {
    alert("Please enter a message.");
    return;
  }

  result.textContent = isSpam(messageInput.value)
    ? "Oh no! This looks like a spam message."
    : "This message does not seem to contain any spam.";
  messageInput.value = "";
});
```
